package com.bbva.gptf.dto.bean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;

public class Orden implements Serializable {
	private static final long serialVersionUID = 1L;

	private BigDecimal cdOrden;
	private BigDecimal cdGestor;
	private String cdValorBmv;
	private String cdEmisora;
	private String cdSerie;
	private Date fhOperacion;
	private BigDecimal tpOperacion;
	private BigDecimal ctTitulo;
	private BigDecimal imPrecio;
	private BigDecimal toImporte;
	private BigDecimal pcTasa;
	private BigDecimal ctTituloPost;
	private BigDecimal imPrecioPost;
	private BigDecimal toImportePost;
	private BigDecimal pcTasaPost;
	private String txJustificacion;
	private BigDecimal stValidPolitica;
	private BigDecimal stOrden;
	private Date tmUmo;
	private Date fhUmo;
	private String cdUsuarioUmo;
	private List<DetalleOrden> detallesOrden;

	private String nuFolio;
	private String instrumento;
	private BigDecimal precioBoleta;
	private BigDecimal tasaBoleta;
	private BigDecimal totalBoleta;
	private BigDecimal diasPorVencerBoleta;
	private String fechaLiquidacionBoleta;
	private int stTituloBoleta;
	private BigDecimal stNominal;
	private BigDecimal imValorNom;
	private Gestor gestor;
	private String inicialesGestor;
	private BigDecimal toImporteNominal;

	private List<Liquidacion> listaLiquidacion;

	/**
	 * @return the cdEmisora
	 */
	public String getCdEmisora() {
		return cdEmisora;
	}

	/**
	 * @return the cdGestor
	 */
	public BigDecimal getCdGestor() {
		return cdGestor;
	}

	/**
	 * @return the cdOrdenDeuda
	 */
	public BigDecimal getCdOrden() {
		return cdOrden;
	}

	/**
	 * @return the cdSerie
	 */
	public String getCdSerie() {
		return cdSerie;
	}

	/**
	 * @return the cdUsuarioUmo
	 */
	public String getCdUsuarioUmo() {
		return cdUsuarioUmo;
	}

	/**
	 * @return the cdValorBmv
	 */
	public String getCdValorBmv() {
		return cdValorBmv;
	}

	/**
	 * @return the ctTitulo
	 */
	public BigDecimal getCtTitulo() {
		return ctTitulo;
	}

	/**
	 * @return the ctTituloPost
	 */
	public BigDecimal getCtTituloPost() {
		return ctTituloPost;
	}

	/**
	 * @return the detallesOrden
	 */
	public List<DetalleOrden> getDetallesOrden() {
		return detallesOrden;
	}

	public BigDecimal getDiasPorVencerBoleta() {
		return diasPorVencerBoleta;
	}

	public String getFechaLiquidacionBoleta() {
		return fechaLiquidacionBoleta;
	}

	/**
	 * @return the fhOperacion
	 */
	public Date getFhOperacion() {
		return fhOperacion;
	}

	/**
	 * @return the fhUmo
	 */
	public Date getFhUmo() {
		return fhUmo;
	}

	public Gestor getGestor() {
		return gestor;
	}

	/**
	 * @return the imPrecio
	 */
	public BigDecimal getImPrecio() {
		return imPrecio;
	}

	/**
	 * @return the imPrecioPost
	 */
	public BigDecimal getImPrecioPost() {
		return imPrecioPost;
	}

	public BigDecimal getImValorNom() {
		return imValorNom;
	}

	public String getInicialesGestor() {
		inicialesGestor = StringUtils.isNotBlank(inicialesGestor) ? inicialesGestor
				: "";
		try {
			if (getGestor() != null) {
				final String nombre = getGestor().getUsuario().getNbUsuario();
				String iniciales = "";
				final String[] texto = nombre.split(" ");
				for (final String name : texto) {
					final char inicial = name.charAt(0);
					iniciales = iniciales + inicial;
				}
				inicialesGestor = iniciales;
			}
			return inicialesGestor;
		} catch (final Exception ex) {
			return "";
		}
	}

	/**
	 * @return the instrumento
	 */
	public String getInstrumento() {
		instrumento = getCdValorBmv() + "_" + getCdEmisora() + "_"
				+ getCdSerie();
		return instrumento;
	}

	public List<Liquidacion> getListaLiquidacion() {
		return listaLiquidacion;
	}

	/**
	 * @return the nuFolio
	 */
	public String getNuFolio() {
		final Calendar cal = Calendar.getInstance();
		cal.setTime(fhOperacion);
		final String dia = String.valueOf(cal.get(Calendar.DATE));
		final String mes = String.valueOf(cal.get(Calendar.MONTH) + 1);
		final String anio = String.valueOf(cal.get(Calendar.YEAR));
		String fecha = "";
		fecha += anio;
		fecha += mes.length() == 1 ? "0" + mes : mes;
		fecha += dia.length() == 1 ? "0" + dia : dia;
		nuFolio = fecha;
		final String cd = String.valueOf(cdOrden);
		for (int cero = cd.length(); cero < 5; cero++) {
			nuFolio += "0";
		}
		nuFolio += cd;
		return nuFolio;
	}

	/**
	 * @return the pcTasa
	 */
	public BigDecimal getPcTasa() {
		return pcTasa;
	}

	/**
	 * @return the pcTasaPost
	 */
	public BigDecimal getPcTasaPost() {
		return pcTasaPost;
	}

	public BigDecimal getPrecioBoleta() {
		return precioBoleta;
	}

	public BigDecimal getStNominal() {
		return stNominal;
	}

	/**
	 * @return the stOrden
	 */
	public BigDecimal getStOrden() {
		return stOrden;
	}

	public int getStTituloBoleta() {
		return stTituloBoleta;
	}

	/**
	 * @return the stValidPolitica
	 */
	public BigDecimal getStValidPolitica() {
		return stValidPolitica;
	}

	public BigDecimal getTasaBoleta() {
		return tasaBoleta;
	}

	/**
	 * @return the tmUmo
	 */
	public Date getTmUmo() {
		return tmUmo;
	}

	/**
	 * @return the toImporte
	 */
	public BigDecimal getToImporte() {
		return toImporte;
	}

	/**
	 * @return the toImportePost
	 */
	public BigDecimal getToImportePost() {
		return toImportePost;
	}

	public BigDecimal getTotalBoleta() {
		return totalBoleta;
	}

	/**
	 * @return the tpOperacion
	 */
	public BigDecimal getTpOperacion() {
		return tpOperacion;
	}

	/**
	 * @return the txJustificacion
	 */
	public String getTxJustificacion() {
		return txJustificacion;
	}

	/**
	 * @param cdEmisora
	 *            the cdEmisora to set
	 */
	public void setCdEmisora(final String cdEmisora) {
		this.cdEmisora = cdEmisora;
	}

	/**
	 * @param cdGestor
	 *            the cdGestor to set
	 */
	public void setCdGestor(final BigDecimal cdGestor) {
		this.cdGestor = cdGestor;
	}

	/**
	 * @param cdOrdenDeuda
	 *            the cdOrdenDeuda to set
	 */
	public void setCdOrden(final BigDecimal cdOrden) {
		this.cdOrden = cdOrden;
	}

	/**
	 * @param cdSerie
	 *            the cdSerie to set
	 */
	public void setCdSerie(final String cdSerie) {
		this.cdSerie = cdSerie;
	}

	/**
	 * @param cdUsuarioUmo
	 *            the cdUsuarioUmo to set
	 */
	public void setCdUsuarioUmo(final String cdUsuarioUmo) {
		this.cdUsuarioUmo = cdUsuarioUmo;
	}

	/**
	 * @param cdValorBmv
	 *            the cdValorBmv to set
	 */
	public void setCdValorBmv(final String cdValorBmv) {
		this.cdValorBmv = cdValorBmv;
	}

	/**
	 * @param ctTitulo
	 *            the ctTitulo to set
	 */
	public void setCtTitulo(final BigDecimal ctTitulo) {
		this.ctTitulo = ctTitulo;
	}

	/**
	 * @param ctTituloPost
	 *            the ctTituloPost to set
	 */
	public void setCtTituloPost(final BigDecimal ctTituloPost) {
		this.ctTituloPost = ctTituloPost;
	}

	/**
	 * @param detallesOrden
	 *            the detallesOrden to set
	 */
	public void setDetallesOrden(final List<DetalleOrden> detallesOrden) {
		this.detallesOrden = detallesOrden;
	}

	public void setDiasPorVencerBoleta(final BigDecimal diasPorVencerBoleta) {
		this.diasPorVencerBoleta = diasPorVencerBoleta;
	}

	public void setFechaLiquidacionBoleta(final String fechaLiquidacionBoleta) {
		this.fechaLiquidacionBoleta = fechaLiquidacionBoleta;
	}

	/**
	 * @param fhOperacion
	 *            the fhOperacion to set
	 */
	public void setFhOperacion(final Date fhOperacion) {
		this.fhOperacion = fhOperacion;
	}

	/**
	 * @param fhUmo
	 *            the fhUmo to set
	 */
	public void setFhUmo(final Date fhUmo) {
		this.fhUmo = fhUmo;
	}

	public void setGestor(final Gestor gestor) {
		this.gestor = gestor;
	}

	/**
	 * @param imPrecio
	 *            the imPrecio to set
	 */
	public void setImPrecio(final BigDecimal imPrecio) {
		this.imPrecio = imPrecio;
	}

	/**
	 * @param imPrecioPost
	 *            the imPrecioPost to set
	 */
	public void setImPrecioPost(final BigDecimal imPrecioPost) {
		this.imPrecioPost = imPrecioPost;
	}

	public void setImValorNom(final BigDecimal imValorNom) {
		this.imValorNom = imValorNom;
	}

	public void setInicialesGestor(final String inicialesGestor) {
		this.inicialesGestor = inicialesGestor;
	}

	/**
	 * @param instrumento
	 *            the instrumento to set
	 */
	public void setInstrumento(final String instrumento) {
		this.instrumento = instrumento;
	}

	public void setListaLiquidacion(final List<Liquidacion> listaLiquidacion) {
		this.listaLiquidacion = listaLiquidacion;
	}

	/**
	 * @param nuFolio
	 *            the nuFolio to set
	 */
	public void setNuFolio(final String nuFolio) {
		this.nuFolio = nuFolio;
	}

	/**
	 * @param pcTasa
	 *            the pcTasa to set
	 */
	public void setPcTasa(final BigDecimal pcTasa) {
		this.pcTasa = pcTasa;
	}

	/**
	 * @param pcTasaPost
	 *            the pcTasaPost to set
	 */
	public void setPcTasaPost(final BigDecimal pcTasaPost) {
		this.pcTasaPost = pcTasaPost;
	}

	public void setPrecioBoleta(final BigDecimal precioBoleta) {
		this.precioBoleta = precioBoleta;
	}

	public void setStNominal(final BigDecimal stNominal) {
		this.stNominal = stNominal;
	}

	/**
	 * @param stOrden
	 *            the stOrden to set
	 */
	public void setStOrden(final BigDecimal stOrden) {
		this.stOrden = stOrden;
	}

	public void setStTituloBoleta(final int stTituloBoleta) {
		this.stTituloBoleta = stTituloBoleta;
	}

	/**
	 * @param stValidPolitica
	 *            the stValidPolitica to set
	 */
	public void setStValidPolitica(final BigDecimal stValidPolitica) {
		this.stValidPolitica = stValidPolitica;
	}

	public void setTasaBoleta(final BigDecimal tasaBoleta) {
		this.tasaBoleta = tasaBoleta;
	}

	/**
	 * @param tmUmo
	 *            the tmUmo to set
	 */
	public void setTmUmo(final Date tmUmo) {
		this.tmUmo = tmUmo;
	}

	/**
	 * @param toImporte
	 *            the toImporte to set
	 */
	public void setToImporte(final BigDecimal toImporte) {
		this.toImporte = toImporte;
	}

	/**
	 * @param toImportePost
	 *            the toImportePost to set
	 */
	public void setToImportePost(final BigDecimal toImportePost) {
		this.toImportePost = toImportePost;
	}

	public void setTotalBoleta(final BigDecimal totalBoleta) {
		this.totalBoleta = totalBoleta;
	}

	/**
	 * @param tpOperacion
	 *            the tpOperacion to set
	 */
	public void setTpOperacion(final BigDecimal tpOperacion) {
		this.tpOperacion = tpOperacion;
	}

	/**
	 * @param txJustificacion
	 *            the txJustificacion to set
	 */
	public void setTxJustificacion(final String txJustificacion) {
		this.txJustificacion = txJustificacion;
	}

	public BigDecimal getToImporteNominal() {
		this.toImporteNominal = imValorNom.intValue() > 0 ? imValorNom
				.multiply(ctTitulo) : BigDecimal.ZERO;
		return toImporteNominal;
	}

	public void setToImporteNominal(BigDecimal toImporteNominal) {
		this.toImporteNominal = toImporteNominal;
	}

}
